//============================================================================================
/**
 * @file	evt_logo.c
 * @brief	競技タイトルロゴ関連
 * @author	Nozomu Saito -> Genya Hosaka(引継ぎ)
 */
//============================================================================================

#include "common.h"

#include "system/arc_util.h"

#include "pkthln_act_def.h"

#include "evt_logo.h"

#include "msgdata/msg.naix"
#include "msgdata/msg_pokethlon.h"
#include "evt_start/pkth_evt_title.naix"

//=============================================================================
/**
 *								定数定義
 */
//=============================================================================
enum
{
	// ※:BG_FRAME 限定
	BG_FRM_S_EVTMSG  = GF_BGL_FRAME2_S,
	BG_FRM_S_EVT  = GF_BGL_FRAME3_S,

	//--　BMPWIN_ID
	BMPWIN_ID_S_EVNAME = 0,
	BMPWIN_ID_S_LOCATE,
	BMPWIN_ID_MAX,
};

//-----------------------------------------------------------------------------
// GF_PRINT_COLOR
//-----------------------------------------------------------------------------
// -- 透明色 --
#define COL_NL (GF_PRINTCOLOR_MAKE(0, 0, 0))
// -- 黒 --
#define COL_BW (GF_PRINTCOLOR_MAKE(FBMP_COL_BLACK, FBMP_COL_BLK_SDW, FBMP_COL_NULL))

#define BMP_STRING_H	( 2 )
#define BMP_STRING_H_L	( 4 )
//-- sub
#define BMP_S_EVNAME_W	( 18 )
#define BMP_S_LOCATE_W	( 24 )
//-- sub evt cgx
#define BMP_S_EVNAME_CGX ( 1 )
#define BMP_S_LOCATE_CGX ( BMP_S_EVNAME_CGX	+ BMP_S_EVNAME_W * BMP_STRING_H_L )

static const BMPWIN_DAT c_BmpWinList[ BMPWIN_ID_MAX ] =
{
	{ BG_FRM_S_EVTMSG, 7,	8,	BMP_S_EVNAME_W,		BMP_STRING_H_L, 0, BMP_S_EVNAME_CGX },	// BMPWIN_ID_S_EVNAME
	{ BG_FRM_S_EVTMSG, 4,	13,	BMP_S_LOCATE_W,		BMP_STRING_H,   0, BMP_S_LOCATE_CGX },	// BMPWIN_ID_S_LOCATE
};

//=============================================================================
/**
 *								構造体定義
 */
//=============================================================================
typedef struct EVT_LOGO_tag
{
	// -- [in] --
	int HeapID;						///< ヒープ
	GF_BGL_INI *bgl;				///< BGL
	PKTHLN_EVT_CODE EvtCode;		///< 競技コード
	// -- [private] --
	ARCHANDLE* arc_ev_title;			///< ロゴ用アーカイブハンドル
	GF_BGL_BMPWIN win[ BMPWIN_ID_MAX ];	///< ロゴに描画する文字列
}EVT_LOGO;

//-- prototype --
static void PrintMsg( GF_BGL_BMPWIN* win, MSGDATA_MANAGER* p_mm, STRBUF* buf, u32 msg_idx, FONT_TYPE font );

//=============================================================================
/**
 *								外部公開関数
 */
//=============================================================================
//--------------------------------------------------------------------------------------------
/**
 * @brief	初期化
 * @param	inEvtCode			競技コード
 * @param	inHeapID			ヒープID
 *
 * @return	EVT_LOGO_PTR		ロゴコントロールポインタ
 */
//--------------------------------------------------------------------------------------------
EVT_LOGO_PTR EvtLogo_Init(const PKTHLN_EVT_CODE inEvtCode, const int inHeapID)
{
	EVT_LOGO_PTR ptr;
	ptr = sys_AllocMemory(inHeapID, sizeof(EVT_LOGO));
	MI_CpuClear8(ptr, sizeof(EVT_LOGO));
	ptr->HeapID = inHeapID;
	ptr->EvtCode = inEvtCode;

	ptr->arc_ev_title = ArchiveDataHandleOpen( ARC_PKTHEV_TITLE, inHeapID );	// アーカイブオープン

	return ptr;
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	開放
 * @param	inEvtNo				競技ナンバー
 * @param	inHeapID			ヒープID
 *
 * @return	EVT_LOGO_PTR		ロゴコントロールポインタ
 */
//--------------------------------------------------------------------------------------------
void EvtLogo_End(EVT_LOGO_PTR ptr)
{
	int i;

	for( i=0; i<BMPWIN_ID_MAX; i++ )
	{
		GF_BGL_BmpWinOff( &ptr->win[i] );
		GF_BGL_BmpWinDel( &ptr->win[i] );
	}

	ArchiveDataHandleClose( ptr->arc_ev_title );
	sys_FreeMemoryEz(ptr);
}


//--------------------------------------------------------------------------------------------
/**
 * @brief	セットアップ
 * @param	ptr					ロゴコントロールポインタ
 * @param	bgl					BGLポインタ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void EvtLogo_Setup(EVT_LOGO_PTR ptr, GF_BGL_INI *bgl )
{
	int i;

	ptr->bgl = bgl;

	for( i=0; i<BMPWIN_ID_MAX; i++ )
	{
		GF_BGL_BmpWinAddEx( ptr->bgl, &ptr->win[i], &c_BmpWinList[i] );
		GF_BGL_BmpWinDataFill( &ptr->win[i], COL_NL );
		GF_BGL_BmpWinClearScrn( &ptr->win[i] );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	BGセット
 * @param	ptr					ロゴコントロールポインタ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void EvtLogo_SetBG(EVT_LOGO_PTR ptr )
{
	const u8 setFrame = BG_FRM_S_EVT;
	u8 ev_idx = ptr->EvtCode;

	// ※:SUB, 拡張パレット限定
	ArcUtil_HDL_PalSet( ptr->arc_ev_title, NARC_pkth_evt_title_bg_evt_ex_NCLR,
			PALTYPE_SUB_BG_EX, 0x6000, 0, ptr->HeapID );

	ArcUtil_HDL_BgCharSet( ptr->arc_ev_title, NARC_pkth_evt_title_bg_evt01_lz_NCGR + ev_idx,
			ptr->bgl, setFrame, 0, 0, TRUE, ptr->HeapID );

	ArcUtil_HDL_ScrnSet( ptr->arc_ev_title, NARC_pkth_evt_title_bg_evt01_lz_NSCR + ev_idx,
			ptr->bgl, setFrame, 0, 0, TRUE, ptr->HeapID );
}

//-----------------------------------------------------------------------------
/**
 *	@brief	BGに文字列を描画
 *	@param	ptr
 *
 *	@retval none
 */
//-----------------------------------------------------------------------------
void EvtLogo_Print(EVT_LOGO_PTR ptr)
{
	enum{ STR_BUF_SIZE = 256, };

	int i;
	u8 ev_idx = ptr->EvtCode;
	MSGDATA_MANAGER* p_mm = MSGMAN_Create( MSGMAN_TYPE_DIRECT, ARC_MSG, NARC_msg_pokethlon_dat, ptr->HeapID );
	STRBUF* buf = STRBUF_Create( STR_BUF_SIZE, ptr->HeapID );

	PrintMsg( &ptr->win[ BMPWIN_ID_S_EVNAME ],		p_mm, buf, msg_pkthln_event_name_00 + ev_idx, FONT_TOUCH );
	PrintMsg( &ptr->win[ BMPWIN_ID_S_LOCATE ],		p_mm, buf, msg_pkthln_locate_00 + ev_idx, FONT_SYSTEM );

	STRBUF_Delete( buf );
	MSGMAN_Delete( p_mm );
}


//-----------------------------------------------------------------------------
/**
 *	@brief	文字列登録
 *
 *	@param	GF_BGL_BMPWIN* win	BMPWINのポインタ
 *	@param	p_mm	MSGMDATA_MAGANERのポインタ
 *	@param	buf		文字列バッファ
 *	@param	msg_idx	メッセージのIDX
 *	@param	font	FONT_TYPE
 *
 *	@retval
 */
//-----------------------------------------------------------------------------
static void PrintMsg( GF_BGL_BMPWIN* win, MSGDATA_MANAGER* p_mm, STRBUF* buf, u32 msg_idx, FONT_TYPE font )
{
	MSGMAN_GetString( p_mm, msg_idx, buf );
	GF_BGL_BmpWinDataFill( win, COL_NL );
	GF_STR_PrintColor( win, font, buf, 0, 0, MSG_NO_PUT, COL_BW, NULL );
	GF_BGL_BmpWinOnVReq( win );
}

